package com.bwie.coupon.mapper;

import com.bwie.common.doamin.dto.AddCouponDTO;
import com.bwie.common.doamin.dto.CouponLIstDTO;
import com.bwie.common.doamin.model.UserCoupon;
import com.bwie.common.doamin.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @className: CouponMapper
 * @Description: TODO
 * @version: v1.８.0
 * @author: 刘洋朔
 * @date: 2025/9/9 11:58
 */
@Mapper
public interface CouponMapper {
    /**
     * 获取优惠券的信息
     * @param couponId
     * @return
     */
    CouponSimpleVO selCouponInfoSimple(@Param("couponId") Long couponId);

    /**
     * 给用户发放优惠券
     * @param userCoupon
     */
    void sendCouponToUser(UserCoupon userCoupon);

    /**
     * 获取优惠券列表
     * @param couponLIstDTO
     * @return
     */
    List<CouponListVO> selectCouponList(CouponLIstDTO couponLIstDTO);

    /**
     * 获取优惠券类型
     * @return
     */
    List<CouponTypeVO> CouponTypeVO();

    /**
     * 获取优惠券适用类型
     * @return
     */
    List<CouponCategoryVO> CouponCategoryVO();

    /**
     * 唯一校验
     * @param couponName
     * @return
     */
    int selSingleCouPon(@Param("couponName") String couponName);

    /**
     * 添加优惠券
     * @param addCouponDTO
     */
    void addCoupon(AddCouponDTO addCouponDTO);

    /**
     * 正常删除
     * @param couponId
     */
    void delCoupon(@Param("couponId") Long couponId);

    /**
     * 领取数量加一,优惠券数量减一
     * @param couponId
     */
    void updateCouponDiffNum(@Param("couponId") Long couponId);

    /**
     * 修改优惠券状态
     * @param userId
     * @param couponId
     */
    void updateCouponStatus(@Param("userId") Long userId, @Param("couponId") Long couponId);

    /**
     * 利用商品id获取它的类型
     * @param productId
     * @return
     */
    String selProductType(@Param("productId") Long productId);

    /**
     * 获取用户能使用的优惠券
     * @param userid
     * @param type
     * @return
     */
    List<CouponListVO> selCouponListById(@Param("userid") Long userid, @Param("type") String type);

    /**
     * 获取用户自己优惠券列表
     * @param couponLIstDTO
     * @return
     */
    List<UserCouponVO> ownCouponList(@Param("id") Long id, @Param("couponLIstDTO") CouponLIstDTO couponLIstDTO);

    /**
     * 根据当前用户信息判断该用户用没有该优惠券
     * @param id
     * @param couponId
     * @return
     */
    int selCouponCountByUserId(@Param("id") Long id, @Param("couponId") Long couponId);

    /**
     * 拿到对应的优惠券的详细信息
     * @param couponId,userId
     * @return
     */
    CouponListVO selCouponById(@Param("couponId") Long couponId,@Param("userId") Long userId);
}
